package com.encapi.samples.controller;

import com.encapi.framework.annotation.*;
import com.encapi.samples.dto.DemoDTO;
import com.encapi.samples.response.ResultResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@RestController
public class IndexController {

    // 日志
    private Logger log = LoggerFactory.getLogger(this.getClass());

    /**
     * 请求不加密，响应加密
     * @param demoDTO 请求参数
     * @return
     */
    @ApiEncryptBody
    @PostMapping("/demo01")
    public ResultResponse demo01(@RequestBody DemoDTO demoDTO) {
        // 打印请求参数
        log.info("方法 'demo01' 获取到的参数为：{}", demoDTO.toString());
        // 返回原值
        return ResultResponse.success("操作成功", demoDTO);
    }


    /**
     * 请求加密，响应不加密
     * @param demoDTO 请求参数
     * @return
     */
    @ApiDecryptBody
    @PostMapping("/demo02")
    public ResultResponse demo02(@RequestBody DemoDTO demoDTO) {
        // 打印请求参数
        log.info("方法 'demo02' 获取到的参数为：{}", demoDTO.toString());
        // 返回原值
        return ResultResponse.success("操作成功", demoDTO);
    }


    /**
     * 请求加密，响应不加密
     * @param demoDTO
     * @return
     */
    @GetMapping("/demo03")
    public ResultResponse demo03(@DecryptEntity DemoDTO demoDTO) {
        // 打印请求参数
        log.info("方法 'demo03' 获取到的参数为：{}", demoDTO.toString());
        // 返回原值
        return ResultResponse.success("操作成功", demoDTO);
    }


    /**
     * 请求加密，响应不加密
     * @param demoId 编号
     * @param demoName 名称
     * @return
     */
    @GetMapping("/demo04")
    public ResultResponse demo04(@DecryptParam String demoId,
                                 @DecryptParam String demoName) {
        // 打印请求参数
        log.info("方法 'demo04' 获取到的demoId：{}, demoName: {}", demoId, demoName);
        // 返回原值
        return ResultResponse.success("操作成功", new DemoDTO(demoId, demoName));
    }

    /**
     * 请求加密，响应加密
     * @param demoDTO 请求参数
     * @return
     */
    @ApiCryptBody
    @PostMapping("/demo05")
    public ResultResponse demo05(@RequestBody DemoDTO demoDTO) {
        // 打印请求参数
        log.info("方法 'demo05' 获取到的参数为：{}", demoDTO.toString());
        // 返回原值
        return ResultResponse.success("操作成功", demoDTO);
    }
}
